import { OpenAPI } from '../core/OpenAPI'

/**
 * 图像工具类
 */
export class ImageUtils {
  /**
   * 获取完整的图片URL
   * @param url 相对URL路径，如 "/native/upload/2025/08/25/xxx.jpg"
   * @returns 完整的图片URL
   */
  static getImageUrl(url?: string): string {
    if (!url) return ''
    
    // 如果已经是完整URL，直接返回
    if (url.startsWith('http://') || url.startsWith('https://')) {
      return url
    }
    
    // 如果是相对路径，拼接服务器地址
    const baseUrl = OpenAPI.BASE
    return `${baseUrl}${url}`
  }

  /**
   * 从上传响应中提取URL
   * @param uploadResponse 上传接口的响应数据
   * @returns 提取出的URL路径
   */
  static extractUrlFromUploadResponse(uploadResponse: any): string {
    if (!uploadResponse || !uploadResponse.data) return ''
    
    // 直接返回data中的url字段
    return uploadResponse.data.url || ''
  }

  /**
   * 验证图片文件
   * @param file 文件对象
   * @param maxSize 最大尺寸（MB），默认2MB
   * @returns 验证结果
   */
  static validateImageFile(file: File, maxSize: number = 2): { valid: boolean; message?: string } {
    // 检查文件类型
    if (!file.type.startsWith('image/')) {
      return { valid: false, message: '只能上传图片文件!' }
    }
    
    // 检查文件大小
    const isLtMaxSize = file.size / 1024 / 1024 < maxSize
    if (!isLtMaxSize) {
      return { valid: false, message: `图片大小不能超过 ${maxSize}MB!` }
    }
    
    return { valid: true }
  }

  /**
   * 创建图片预览URL
   * @param file 文件对象
   * @returns Promise<string> 预览URL
   */
  static createPreviewUrl(file: File): Promise<string> {
    return new Promise((resolve) => {
      const reader = new FileReader()
      reader.onload = (e) => {
        resolve(e.target?.result as string)
      }
      reader.readAsDataURL(file)
    })
  }
}
